package code17_reflect;

import java.lang.reflect.Modifier;

public class TestClass {

	public static void main(String[] args) {
		//Class c = Stu.class;
		Class<?> c = Stu.class;
		//Class<Stu> c = Stu.class;
		
		System.out.println("类全名:" + c.getName());// 包名.类名
		System.out.println("简单类名:" + c.getSimpleName());
		// 有很多的方法, 用于判断类的类型
		System.out.println("是否是接口:" + c.isInterface());
		
		// 获取父类
		Class<?> superClass = c.getSuperclass();
		System.out.println("父类名:" + superClass.getName());
		
		// 获取实现的接口
		Class<?>[] interfaces = c.getInterfaces();
		System.out.println("实现的接口:");
		for (Class<?> ci : interfaces) {
			System.out.println("\t" + ci.getName());
		}
		
		// 获取类的修饰符
		int modifiers = c.getModifiers();
		// Modifier.toString(mod) 把int值描述的修饰符, 转换为字符串描述的修饰符
		System.out.println("modifiers:" + Modifier.toString(modifiers));
		
		// 获取包
		Package pkg = c.getPackage();
		System.out.println("包:" + pkg.getName());
		
		try {
			// 使用无参构造, 创建对象
			Object instance = c.newInstance();
			
			// Class<Stu> 的效果
			//Stu stu = c.newInstance();
			System.out.println("instance:" + instance);
		} catch (InstantiationException e) {
			// 一般表示没有无参构造方法
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// 构造方法不能直接访问, 例如 构造方法修饰符是 private
			e.printStackTrace();
		}
		
	}
	
}
